# 通过登录 然后进入主页面


# 通过找登录接口我们知道  登录得时候需要的参数很多
# __VIEWSTATE: 2rnkl/XA4WlkOaF3NkX3wyMbgvUtP0zKcjvRBi5thNcum3Ilr2DiJan3pf2xSD0gwo5QzP2PItBNfDkweIwT3YUHNXUbCCLwU0VGVCqXqz/kXtprXk5JMeEafQqKZ6BpXyAtBW9PmfOSXZkpYEjrNl311os=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://www.gushiwen.cn/user/collect.aspx
# email: 15713615763
# pwd: 123456
# code: 4888
# denglu: 登录

# 观察__VIEWSTATE     __VIEWSTATEGENERATOR     code  是可以变化的量

# 难点：(1) __VIEWSTATE     __VIEWSTATEGENERATOR   一般看不到的数据  都在页面的源码中
#      经观察  这两个数据在页面源码中  因此我们需要获取页面的源码  然后进行解析就可以获取了
#      (2) 验证码-

import requests


# 这是登录页面的url地址
url = 'https://www.gushiwen.cn/user/login.aspx?from=http://www.gushiwen.cn/user/collect.aspx'

headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}

# 获取页面的源码
response = requests.get(url=url, headers=headers)
content = response.text

# 解析页面源码  获取__VIEWSTATE     __VIEWSTATEGENERATOR
from bs4 import BeautifulSoup

soup = BeautifulSoup(content, 'lxml')

# 获取 __VIEWSTATE    返回的列表
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')

# 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')


# 获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://www.gushiwen.cn' + code

# # 有坑 不能用
# import urllib.request
# urllib.request.urlretrieve(url=code_url, filename='./pc/code.jpg')
# requests中有一个session()方法  通过session的返回值  可以使请求变成一个对象


session = requests.session()

# 验证码的url的内容
response_code = session.get(code_url)

# 注意此时要使用二进制数据  因为是图片的下载
content_code = response_code.content

with open('./pc/code.jpg', 'wb')as fp:
    fp.write(content_code)

# 获取了验证码的图片之后 下载到本地  观察之后 在控制台输入这个验证码 就可以把值给到
# code的参数  就可以登录-

code_name = input("请输入你的验证码：")


# 点击登录
url_post = 'https://www.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fwww.gushiwen.cn%2fuser%2fcollect.aspx'

data_post = {
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR': viewstategenerator,
    'from': 'http://www.gushiwen.cn/user/collect.aspx',
    'email': '15713615763',
    'pwd': '123456',
    'code': code_name,
    'denglu': '登录',
}

response_post = session.post(url=url, headers=headers, data=data_post)

content_post = response_post.text

with open('./pc/gsw.html', 'w', encoding='utf-8')as fp:
    fp.write(content_post)


# 难点
# (1) 隐藏域
# (2) 验证码-
